home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
AmigActive 2
/
AACD 2.iso
/
AACD
/
Magazine
/
GraphicsCards
/
StormMesa
/
src
/
accum.s
< prev
next >
Wrap
Text File
|
1999-02-04
|
19KB
|
1,085 lines
; Storm C Compiler
; Work2:Mesa3/Mesa-3.0/src/accum.c
mc68030
mc68881
XREF _gl_read_rgba_span
XREF _gl_mask_rgba_span
XREF _gl_update_state
XREF _gl_error
XREF _gl_warning
XREF _q_memset
XREF _malloc
XREF _free
XREF _CC
SECTION "_gl_alloc_accum_buffer:0",CODE
;void gl_alloc_accum_buffer( GLcontext *ctx )
XDEF _gl_alloc_accum_buffer
_gl_alloc_accum_buffer
move.l a2,-(a7)
move.l $8(a7),a2
L72
; if (ctx->Buffer->Accum)
move.l $8FC(a2),a0
tst.l $14(a0)
beq.b L74
L73
; free( ctx->Buffer->Accum );
move.l $8FC(a2),a0
move.l $14(a0),-(a7)
jsr _free
addq.w #4,a7
; ctx->Buffer->Accum = NULL;
move.l $8FC(a2),a0
clr.l $14(a0)
L74
; n = ctx->Buffer->Width * ctx->Buffer->Height * 4 * sizeof(GLac
move.l $8FC(a2),a0
move.l 4(a0),d0
move.l $8FC(a2),a0
muls.l $8(a0),d0
moveq #2,d1
asl.l d1,d0
moveq #1,d1
asl.l d1,d0
; ctx->Buffer->Accum = (GLaccum *) malloc( n );
move.l d0,-(a7)
jsr _malloc
addq.w #4,a7
move.l $8FC(a2),a0
move.l d0,$14(a0)
; if (!ctx->Buffer->Accum)
move.l $8FC(a2),a0
tst.l $14(a0)
bne.b L76
L75
; gl_error( ctx, GL_OUT_OF_MEMORY, "glAccum" );
move.l #L71,-(a7)
pea $505.w
move.l a2,-(a7)
jsr _gl_error
add.w #$C,a7
L76
move.l (a7)+,a2
rts
L71
dc.b 'glAccum',0
SECTION "_gl_ClearAccum:0",CODE
rts
;void gl_ClearAccum( GLcontext *ctx,
XDEF _gl_ClearAccum
_gl_ClearAccum
fmovem.x fp2/fp3/fp4,-(a7)
move.l $28(a7),a0
fmove.s $2C(a7),fp0
fmove.s $38(a7),fp1
fmove.s $34(a7),fp2
fmove.s $30(a7),fp3
L78
; if (INSIDE_BEGIN_END(ctx))
move.l a0,a1
add.l #$E968,a1
move.l (a1),d0
cmp.l #$1A00,d0
beq.b L80
L79
; gl_error( ctx, GL_INVALID_OPERATION, "glAccum" );
move.l #L77,-(a7)
pea $502.w
move.l a0,-(a7)
jsr _gl_error
add.w #$C,a7
fmovem.x (a7)+,fp2/fp3/fp4
rts
L80
; ctx->Accum.ClearColor[0] = CLAMP( red, -1.0, 1.0 );
fmove.x fp0,fp4
fcmp.d #$.BFF00000.00000000,fp4
fboge.b L82
L81
fmove.d #$.BFF00000.00000000,fp0
bra.b L86
L82
fmove.x fp0,fp4
fcmp.d #$.3FF00000.00000000,fp4
fbole.b L84
L83
fmove.d #$.3FF00000.00000000,fp0
L84
L85
L86
fmove.s fp0,$21B4(a0)
; ctx->Accum.ClearColor[1] = CLAMP( green, -1.0, 1.0 );
fmove.x fp3,fp0
fcmp.d #$.BFF00000.00000000,fp0
fboge.b L88
L87
fmove.d #$.BFF00000.00000000,fp0
bra.b L92
L88
fmove.x fp3,fp0
fcmp.d #$.3FF00000.00000000,fp0
fbole.b L90
L89
fmove.d #$.3FF00000.00000000,fp0
bra.b L91
L90
fmove.x fp3,fp0
L91
L92
lea $21B4(a0),a1
fmove.s fp0,4(a1)
; ctx->Accum.ClearColor[2] = CLAMP( blue, -1.0, 1.0 );
fmove.x fp2,fp0
fcmp.d #$.BFF00000.00000000,fp0
fboge.b L94
L93
fmove.d #$.BFF00000.00000000,fp0
bra.b L98
L94
fmove.x fp2,fp0
fcmp.d #$.3FF00000.00000000,fp0
fbole.b L96
L95
fmove.d #$.3FF00000.00000000,fp0
bra.b L97
L96
fmove.x fp2,fp0
L97
L98
lea $21B4(a0),a1
fmove.s fp0,$8(a1)
; ctx->Accum.ClearColor[3] = CLAMP( alpha, -1.0, 1.0 );
fmove.x fp1,fp0
fcmp.d #$.BFF00000.00000000,fp0
fboge.b L100
L99
fmove.d #$.BFF00000.00000000,fp0
bra.b L104
L100
fmove.x fp1,fp0
fcmp.d #$.3FF00000.00000000,fp0
fbole.b L102
L101
fmove.d #$.3FF00000.00000000,fp0
bra.b L103
L102
fmove.x fp1,fp0
L103
L104
lea $21B4(a0),a0
fmove.s fp0,$C(a0)
fmovem.x (a7)+,fp2/fp3/fp4
rts
L77
dc.b 'glAccum',0
SECTION "_gl_Accum:0",CODE
;void gl_Accum( GLcontext *ctx, GLenum op, GLfloat value )
XDEF _gl_Accum
_gl_Accum
L181 EQU -$3278
link a5,#L181
movem.l d2-d7/a2,-(a7)
fmovem.x fp2/fp3/fp4/fp5/fp6,-(a7)
move.l $C(a5),d3
move.l $8(a5),a2
fmove.s $10(a5),fp2
L107
; if (INSIDE_BEGIN_END(ctx))
move.l a2,a0
add.l #$E968,a0
move.l (a0),d0
cmp.l #$1A00,d0
beq.b L109
L108
; gl_error( ctx, GL_INVALID_OPERATION, "glAccum" );
move.l #L105,-(a7)
pea $502.w
move.l a2,-(a7)
jsr _gl_error
add.w #$C,a7
fmovem.x (a7)+,fp2/fp3/fp4/fp5/fp6
movem.l (a7)+,d2-d7/a2
unlk a5
rts
L109
; if (ctx->Visual->AccumBits==0 || !ctx->Buffer->Accum)
move.l $8F8(a2),a0
tst.l $18(a0)
beq.b L111
L110
move.l $8FC(a2),a0
tst.l $14(a0)
bne.b L112
L111
; gl_warning(ctx, "Calling glAccum() without an accumulati
move.l #L106,-(a7)
move.l a2,-(a7)
jsr _gl_warning
addq.w #$8,a7
fmovem.x (a7)+,fp2/fp3/fp4/fp5/fp6
movem.l (a7)+,d2-d7/a2
unlk a5
rts
L112
; if (sizeof(GLaccum)==1)
; else if (sizeof(GLaccum)==2)
; acc_scale = 32767.0;
fmove.s #$.46FFFE00,fp6
; if (ctx->NewState)
move.l a2,a0
add.l #$E960,a0
tst.l (a0)
beq.b L114
L113
; gl_update_state( ctx );
move.l a2,-(a7)
jsr _gl_update_state
addq.w #4,a7
L114
; if (ctx->Scissor.Enabled)
move.l a2,a0
add.l #$DE92,a0
tst.b (a0)
beq.b L116
L115
; xpos = ctx->Scissor.X;
move.l a2,a0
add.l #$DE92,a0
move.l 2(a0),d7
; ypos = ctx->Scissor.Y;
move.l a2,a0
add.l #$DE92,a0
move.l 6(a0),d6
; width = ctx->Scissor.Width;
move.l a2,a0
add.l #$DE92,a0
move.l $A(a0),d2
; height = ctx->Scissor.Height;
move.l a2,a0
add.l #$DE92,a0
move.l $E(a0),-$10(a5)
bra.b L117
L116
; xpos = 0;
moveq #0,d7
; ypos = 0;
moveq #0,d6
; width = ctx->Buffer->Width;
move.l $8FC(a2),a0
move.l 4(a0),d2
; height = ctx->Buffer->Height;
move.l $8FC(a2),a0
move.l $8(a0),-$10(a5)
L117
; switch (op)
cmp.l #$102,d3
beq L146
bgt.b L182
cmp.l #$100,d3
beq L132
cmp.l #$101,d3
beq L139
bra L179
L182
cmp.l #$103,d3
beq.b L125
cmp.l #$104,d3
beq.b L118
bra L179
;
L118
; ival = (GLaccum) (value * acc_scale);
fmul.x fp6,fp2
fmove.l fp2,d0
; for (j=0;
moveq #0,d4
bra.b L123
L119
; acc = ctx->Buffer->Accum
move.l $8FC(a2),a0
move.l $14(a0),a1
move.l $8FC(a2),a0
move.l 4(a0),d1
mulu.l d6,d1
add.l d7,d1
moveq #2,d3
asl.l d3,d1
lea 0(a1,d1.l*2),a0
; for (i=0;
moveq #0,d3
bra.b L121
L120
; *acc += ival;
add.w d0,(a0)
; acc++;
addq.w #2,a0
; *acc += ival;
add.w d0,(a0)
; acc++;
addq.w #2,a0
; *acc += ival;
add.w d0,(a0)
; acc++;
addq.w #2,a0
; *acc += ival;
add.w d0,(a0)
; acc++;
addq.w #2,a0
addq.l #1,d3
L121
cmp.l d2,d3
blo.b L120
L122
; ypos++;
move.l d6,d1
addq.l #1,d1
move.l d1,d6
addq.l #1,d4
L123
cmp.l -$10(a5),d4
blo.b L119
L124
;
bra L180
L125
; for (j=0;
moveq #0,d3
bra L130
L126
; acc = ctx->Buffer->Accum
move.l $8FC(a2),a0
move.l $14(a0),a1
move.l $8FC(a2),a0
move.l 4(a0),d0
mulu.l d6,d0
add.l d7,d0
moveq #2,d1
asl.l d1,d0
lea 0(a1,d0.l*2),a0
; for (i=0;
moveq #0,d0
bra.b L128
L127
; *acc = (GLaccum) ( (GLfloat) *acc * value );
move.w (a0),d1
ext.l d1
fmove.l d1,fp0
fmul.x fp2,fp0
fmove.l fp0,d1
move.w d1,(a0)
; acc++;
addq.w #2,a0
; *acc = (GLaccum) ( (GLfloat) *acc * value );
move.w (a0),d1
ext.l d1
fmove.l d1,fp0
fmul.x fp2,fp0
fmove.l fp0,d1
move.w d1,(a0)
; acc++;
addq.w #2,a0
; *acc = (GLaccum) ( (GLfloat) *acc * value );
move.w (a0),d1
ext.l d1
fmove.l d1,fp0
fmul.x fp2,fp0
fmove.l fp0,d1
move.w d1,(a0)
; acc++;
addq.w #2,a0
; *acc = (GLaccum) ( (GLfloat) *acc * value );
move.w (a0),d1
ext.l d1
fmove.l d1,fp0
fmul.x fp2,fp0
fmove.l fp0,d1
move.w d1,(a0)
; acc++;
addq.w #2,a0
addq.l #1,d0
L128
cmp.l d2,d0
blo.b L127
L129
; ypos++;
move.l d6,d0
addq.l #1,d0
move.l d0,d6
addq.l #1,d3
L130
cmp.l -$10(a5),d3
blo L126
L131
;
bra L180
L132
; (void) (*ctx->Driver.SetBuffer)( ctx, ctx->Pixel.ReadBuffe
move.l a2,a0
add.l #$B168,a0
move.l (a0),-(a7)
move.l a2,-(a7)
move.l $91C(a2),a0
jsr (a0)
addq.w #$8,a7
; rscale = value * acc_scale / 255.0;
fmove.x fp2,fp0
fmul.x fp6,fp0
fdiv.d #$.406FE000.00000000,fp0
fmove.x fp0,fp5
; gscale = value * acc_scale / 255.0;
fmove.x fp2,fp0
fmul.x fp6,fp0
fdiv.d #$.406FE000.00000000,fp0
fmove.x fp0,fp4
; bscale = value * acc_scale / 255.0;
fmove.x fp2,fp0
fmul.x fp6,fp0
fdiv.d #$.406FE000.00000000,fp0
fmove.x fp0,fp3
; ascale = value * acc_scale / 255.0;
fmul.x fp6,fp2
fmove.x fp2,fp0
fdiv.d #$.406FE000.00000000,fp0
fmove.x fp0,fp2
; for (j=0;
moveq #0,d4
bra L137
L133
; gl_read_rgba_span(ctx, width, xpos, ypos, rgba);
pea -$1926(a5)
move.l d6,-(a7)
move.l d7,-(a7)
move.l d2,-(a7)
move.l a2,-(a7)
jsr _gl_read_rgba_span
add.w #$14,a7
; acc = ctx->Buffer->Accum
move.l $8FC(a2),a0
move.l $14(a0),a1
move.l $8FC(a2),a0
move.l 4(a0),d0
mulu.l d6,d0
add.l d7,d0
moveq #2,d1
asl.l d1,d0
lea 0(a1,d0.l*2),a0
; for (i=0;
moveq #0,d0
bra L135
L134
; *acc += (GLaccum) ( (GLfloat) rgba[i][RCOMP] * rscale );
lea -$1926(a5),a1
moveq #0,d1
move.b 0(a1,d0.l*4),d1
fmove.l d1,fp0
fmul.x fp5,fp0
fmove.l fp0,d1
move.w d1,d3
add.w d3,(a0)
; acc++;
addq.w #2,a0
; *acc += (GLaccum) ( (GLfloat) rgba[i][GCOMP] * gscale );
lea -$1926(a5),a1
lea 0(a1,d0.l*4),a1
moveq #0,d1
move.b 1(a1),d1
fmove.l d1,fp0
fmul.x fp4,fp0
fmove.l fp0,d1
move.w d1,d3
add.w d3,(a0)
; acc++;
addq.w #2,a0
; *acc += (GLaccum) ( (GLfloat) rgba[i][BCOMP] * bscale );
lea -$1926(a5),a1
lea 0(a1,d0.l*4),a1
moveq #0,d1
move.b 2(a1),d1
fmove.l d1,fp0
fmul.x fp3,fp0
fmove.l fp0,d1
move.w d1,d3
add.w d3,(a0)
; acc++;
addq.w #2,a0
; *acc += (GLaccum) ( (GLfloat) rgba[i][ACOMP] * ascale );
lea -$1926(a5),a1
lea 0(a1,d0.l*4),a1
moveq #0,d1
move.b 3(a1),d1
fmove.l d1,fp0
fmul.x fp2,fp0
fmove.l fp0,d1
move.w d1,d3
add.w d3,(a0)
; acc++;
addq.w #2,a0
addq.l #1,d0
L135
cmp.l d2,d0
blo L134
L136
; ypos++;
move.l d6,d0
addq.l #1,d0
move.l d0,d6
addq.l #1,d4
L137
cmp.l -$10(a5),d4
blo L133
L138
; (void) (*ctx->Driver.SetBuffer)( ctx, ctx->Color.DrawBuffe
move.l $21E2(a2),-(a7)
move.l a2,-(a7)
move.l $91C(a2),a0
jsr (a0)
addq.w #$8,a7
;
bra L180
L139
; (void) (*ctx->Driver.SetBuffer)( ctx, ctx->Pixel.ReadBuffe
move.l a2,a0
add.l #$B168,a0
move.l (a0),-(a7)
move.l a2,-(a7)
move.l $91C(a2),a0
jsr (a0)
addq.w #$8,a7
; rscale = value * acc_scale / 255.0;
fmove.x fp2,fp0
fmul.x fp6,fp0
fdiv.d #$.406FE000.00000000,fp0
fmove.x fp0,fp5
; gscale = value * acc_scale / 255.0;
fmove.x fp2,fp0
fmul.x fp6,fp0
fdiv.d #$.406FE000.00000000,fp0
fmove.x fp0,fp4
; bscale = value * acc_scale / 255.0;
fmove.x fp2,fp0
fmul.x fp6,fp0
fdiv.d #$.406FE000.00000000,fp0
fmove.x fp0,fp3
; ascale = value * acc_scale / 255.0;
fmul.x fp6,fp2
fmove.x fp2,fp0
fdiv.d #$.406FE000.00000000,fp0
fmove.x fp0,fp2
; for (j=0;
moveq #0,d3
bra L144
L140
; gl_read_rgba_span(ctx, width, xpos, ypos, rgba);
pea -$1926(a5)
move.l d6,-(a7)
move.l d7,-(a7)
move.l d2,-(a7)
move.l a2,-(a7)
jsr _gl_read_rgba_span
add.w #$14,a7
; acc = ctx->Buffer->Accum
move.l $8FC(a2),a0
move.l $14(a0),a1
move.l $8FC(a2),a0
move.l 4(a0),d0
mulu.l d6,d0
add.l d7,d0
moveq #2,d1
asl.l d1,d0
lea 0(a1,d0.l*2),a0
; for (i=0;
moveq #0,d0
bra.b L142
L141
; *acc++ = (GLaccum) ( (GLfloat) rgba[i][RCOMP] * rscale );
lea -$1926(a5),a1
moveq #0,d1
move.b 0(a1,d0.l*4),d1
fmove.l d1,fp0
fmul.x fp5,fp0
fmove.l fp0,d1
move.w d1,(a0)+
; *acc++ = (GLaccum) ( (GLfloat) rgba[i][GCOMP] * gscale );
lea -$1926(a5),a1
lea 0(a1,d0.l*4),a1
moveq #0,d1
move.b 1(a1),d1
fmove.l d1,fp0
fmul.x fp4,fp0
fmove.l fp0,d1
move.w d1,(a0)+
; *acc++ = (GLaccum) ( (GLfloat) rgba[i][BCOMP] * bscale );
lea -$1926(a5),a1
lea 0(a1,d0.l*4),a1
moveq #0,d1
move.b 2(a1),d1
fmove.l d1,fp0
fmul.x fp3,fp0
fmove.l fp0,d1
move.w d1,(a0)+
; *acc++ = (GLaccum) ( (GLfloat) rgba[i][ACOMP] * ascale );
lea -$1926(a5),a1
lea 0(a1,d0.l*4),a1
moveq #0,d1
move.b 3(a1),d1
fmove.l d1,fp0
fmul.x fp2,fp0
fmove.l fp0,d1
move.w d1,(a0)+
addq.l #1,d0
L142
cmp.l d2,d0
blo.b L141
L143
; ypos++;
move.l d6,d0
addq.l #1,d0
move.l d0,d6
addq.l #1,d3
L144
cmp.l -$10(a5),d3
blo L140
L145
; (void) (*ctx->Driver.SetBuffer)( ctx, ctx->Color.DrawBuffe
move.l $21E2(a2),-(a7)
move.l a2,-(a7)
move.l $91C(a2),a0
jsr (a0)
addq.w #$8,a7
;
bra L180
L146
; rscale = value / acc_scale * 255.0F;
fmove.x fp2,fp5
fdiv.x fp6,fp5
fmul.s #$.437F0000,fp5
; gscale = value / acc_scale * 255.0F;
fmove.x fp2,fp4
fdiv.x fp6,fp4
fmul.s #$.437F0000,fp4
; bscale = value / acc_scale * 255.0F;
fmove.x fp2,fp3
fdiv.x fp6,fp3
fmul.s #$.437F0000,fp3
; ascale = value / acc_scale * 255.0F;
fdiv.x fp6,fp2
fmul.s #$.437F0000,fp2
; for (j=0;
clr.l -$325A(a5)
bra L177
L147
; acc = ctx->Buffer->Accum
move.l $8FC(a2),a0
move.l $14(a0),a1
move.l $8FC(a2),a0
move.l 4(a0),d0
mulu.l d6,d0
add.l d7,d0
moveq #2,d1
asl.l d1,d0
lea 0(a1,d0.l*2),a0
; for (i=0;
moveq #0,d0
bra L173
L148
; r = (GLint) ( (GLfloat) (*acc++) * rscale + 0.5F );
move.w (a0)+,d1
ext.l d1
fmove.l d1,fp0
fmul.x fp5,fp0
fadd.s #$.3F000000,fp0
fmove.l fp0,d5
; g = (GLint) ( (GLfloat) (*acc++) * gscale + 0.5F );
move.w (a0)+,d1
ext.l d1
fmove.l d1,fp0
fmul.x fp4,fp0
fadd.s #$.3F000000,fp0
fmove.l fp0,d4
; b = (GLint) ( (GLfloat) (*acc++) * bscale + 0.5F );
move.w (a0)+,d1
ext.l d1
fmove.l d1,fp0
fmul.x fp3,fp0
fadd.s #$.3F000000,fp0
fmove.l fp0,d3
; a = (GLint) ( (GLfloat) (*acc++) * ascale + 0.5F );
move.w (a0)+,d1
ext.l d1
fmove.l d1,fp0
fmul.x fp2,fp0
fadd.s #$.3F000000,fp0
fmove.l fp0,d1
; rgba[i][RCOMP] = CLAMP( r, 0, 255 );
tst.l d5
bpl.b L150
L149
moveq #0,d5
bra.b L154
L150
cmp.l #$FF,d5
ble.b L152
L151
move.l #$FF,d5
L152
L153
L154
lea -$323E(a5),a1
move.b d5,0(a1,d0.l*4)
; rgba[i][GCOMP] = CLAMP( g, 0, 255 );
tst.l d4
bpl.b L156
L155
moveq #0,d4
bra.b L160
L156
cmp.l #$FF,d4
ble.b L158
L157
move.l #$FF,d4
L158
L159
L160
lea -$323E(a5),a1
lea 0(a1,d0.l*4),a1
move.b d4,1(a1)
; rgba[i][BCOMP] = CLAMP( b, 0, 255 );
tst.l d3
bpl.b L162
L161
moveq #0,d3
bra.b L166
L162
cmp.l #$FF,d3
ble.b L164
L163
move.l #$FF,d3
L164
L165
L166
lea -$323E(a5),a1
lea 0(a1,d0.l*4),a1
move.b d3,2(a1)
; rgba[i][ACOMP] = CLAMP( a, 0, 255 );
tst.l d1
bpl.b L168
L167
moveq #0,d1
bra.b L172
L168
cmp.l #$FF,d1
ble.b L170
L169
move.l #$FF,d1
L170
L171
L172
lea -$323E(a5),a1
lea 0(a1,d0.l*4),a1
move.b d1,3(a1)
addq.l #1,d0
L173
cmp.l d2,d0
blo L148
L174
; if (ctx->Color.SWmasking)
tst.b $21E0(a2)
beq.b L176
L175
; gl_mask_rgba_span( ctx, width, xpos, ypos, rgba );
pea -$323E(a5)
move.l d6,-(a7)
move.l d7,-(a7)
move.l d2,-(a7)
move.l a2,-(a7)
jsr _gl_mask_rgba_span
add.w #$14,a7
L176
; (*ctx->Driver.WriteRGBASpan)( ctx, width, xpos, ypos
clr.l -(a7)
pea -$323E(a5)
move.l d6,-(a7)
move.l d7,-(a7)
move.l d2,-(a7)
move.l a2,-(a7)
move.l $924(a2),a0
jsr (a0)
add.w #$18,a7
; ypos++;
move.l d6,d0
addq.l #1,d0
move.l d0,d6
addq.l #1,-$325A(a5)
L177
move.l -$325A(a5),d0
cmp.l -$10(a5),d0
blo L147
L178
;
bra.b L180
L179
; gl_error( ctx, GL_INVALID_ENUM, "glAccum" );
move.l #L105,-(a7)
pea $500.w
move.l a2,-(a7)
jsr _gl_error
add.w #$C,a7
L180
fmovem.x (a7)+,fp2/fp3/fp4/fp5/fp6
movem.l (a7)+,d2-d7/a2
unlk a5
rts
L106
dc.b 'Calling glAccum() without an accumulation buffer',0
L105
dc.b 'glAccum',0
SECTION "_gl_clear_accum_buffer:0",CODE
;void gl_clear_accum_buffer( GLcontext *ctx )
XDEF _gl_clear_accum_buffer
_gl_clear_accum_buffer
L205 EQU -$40
link a5,#L205
movem.l d2-d7/a2,-(a7)
fmovem.x fp2,-(a7)
move.l $8(a5),a2
L183
; if (ctx->Visual->AccumBits==0)
move.l $8F8(a2),a0
tst.l $18(a0)
bne.b L185
L184
fmovem.x (a7)+,fp2
movem.l (a7)+,d2-d7/a2
unlk a5
rts
L185
; if (sizeof(GLaccum)==1)
; else if (sizeof(GLaccum)==2)
; acc_scale = 32767.0;
fmove.s #$.46FFFE00,fp2
; buffersize = ctx->Buffer->Width * ctx->Buffer->Height;
move.l $8FC(a2),a0
move.l 4(a0),d2
move.l $8FC(a2),a0
muls.l $8(a0),d2
; if (!ctx->Buffer->Accum)
move.l $8FC(a2),a0
tst.l $14(a0)
bne.b L187
L186
; ctx->Buffer->Accum = (GLaccum *)
move.l d2,d0
moveq #2,d1
asl.l d1,d0
moveq #1,d1
asl.l d1,d0
move.l d0,-(a7)
jsr _malloc
addq.w #4,a7
move.l $8FC(a2),a0
move.l d0,$14(a0)
L187
; if (ctx->Buffer->Accum)
move.l $8FC(a2),a0
tst.l $14(a0)
beq L204
L188
; if (ctx->Scissor.Enabled)
move.l a2,a0
add.l #$DE92,a0
tst.b (a0)
beq L196
L189
; r = (GLaccum) (ctx->Accum.ClearColor[0] * acc_scale);
fmove.s $21B4(a2),fp0
fmul.x fp2,fp0
fmove.l fp0,d0
move.w d0,d5
; g = (GLaccum) (ctx->Accum.ClearColor[1] * acc_scale);
lea $21B4(a2),a0
fmove.s 4(a0),fp0
fmul.x fp2,fp0
fmove.l fp0,d0
move.w d0,d4
; b = (GLaccum) (ctx->Accum.ClearColor[2] * acc_scale);
lea $21B4(a2),a0
fmove.s $8(a0),fp0
fmul.x fp2,fp0
fmove.l fp0,d0
move.w d0,d3
; a = (GLaccum) (ctx->Accum.ClearColor[3] * acc_scale);
lea $21B4(a2),a0
fmove.s $C(a0),fp0
fmul.x fp2,fp0
fmove.l fp0,d0
move.w d0,d2
; width = 4 * (ctx->Buffer->Xmax - ctx->Buffer->Xmin + 1);
move.l $8FC(a2),a0
move.l $28(a0),d0
move.l $8FC(a2),a0
sub.l $24(a0),d0
addq.l #1,d0
move.l d0,d1
moveq #2,d0
asl.l d0,d1
; height = ctx->Buffer->Ymax - ctx->Buffer->Ymin + 1;
move.l $8FC(a2),a0
move.l $30(a0),-$20(a5)
move.l $8FC(a2),a0
move.l -$20(a5),d0
sub.l $2C(a0),d0
move.l d0,-$20(a5)
addq.l #1,-$20(a5)
; row = ctx->Buffer->Accum
move.l $8FC(a2),a0
move.l $14(a0),a1
move.l $8FC(a2),a0
move.l $2C(a0),d0
move.l $8FC(a2),a0
muls.l 4(a0),d0
move.l $8FC(a2),a0
add.l $24(a0),d0
moveq #2,d6
asl.l d6,d0
lea 0(a1,d0.l*2),a0
; for (j=0;
moveq #0,d7
bra.b L194
L190
; for (i=0;
moveq #0,d0
bra.b L192
L191
; row[i+0] = r;
move.w d5,0(a0,d0.l*2)
; row[i+1] = g;
lea 2(a0),a1
move.w d4,0(a1,d0.l*2)
; row[i+2] = b;
lea 4(a0),a1
move.w d3,0(a1,d0.l*2)
; row[i+3] = a;
lea 6(a0),a1
move.w d2,0(a1,d0.l*2)
addq.l #4,d0
L192
cmp.l d1,d0
blt.b L191
L193
; row += 4 * ctx->Buffer->Width;
move.l $8FC(a2),a1
move.l 4(a1),d0
moveq #2,d6
asl.l d6,d0
moveq #1,d6
asl.l d6,d0
add.l d0,a0
move.l d7,d0
addq.l #1,d0
move.l d0,d7
L194
move.l d7,d0
cmp.l -$20(a5),d0
blt.b L190
L195
bra L204
L196
; if (ctx->Accum.ClearColor[0]==0.0 &&
fmove.s $21B4(a2),fp0
ftst.d fp0
fbne.b L201
L197
lea $21B4(a2),a0
fmove.s 4(a0),fp0
ftst.d fp0
fbne.b L201
L198
lea $21B4(a2),a0
fmove.s $8(a0),fp0
ftst.d fp0
fbne.b L201
L199
lea $21B4(a2),a0
fmove.s $C(a0),fp0
ftst.d fp0
fbne.b L201
L200
;Buffer->Accum, 0,
moveq #2,d0
asl.l d0,d2
moveq #1,d0
asl.l d0,d2
move.l d2,-(a7)
clr.l -(a7)
move.l $8FC(a2),a0
move.l $14(a0),-(a7)
jsr _q_memset
add.w #$C,a7
bra.b L204
L201
; acc = ctx->Buffer->Accum;
move.l $8FC(a2),a0
move.l $14(a0),a0
; r = (GLaccum) (ctx->Accum.ClearColor[0] * acc_scale);
fmove.s $21B4(a2),fp0
fmul.x fp2,fp0
fmove.l fp0,d0
move.w d0,d5
; g = (GLaccum) (ctx->Accum.ClearColor[1] * acc_scale);
lea $21B4(a2),a1
fmove.s 4(a1),fp0
fmul.x fp2,fp0
fmove.l fp0,d0
move.w d0,d4
; b = (GLaccum) (ctx->Accum.ClearColor[2] * acc_scale);
lea $21B4(a2),a1
fmove.s $8(a1),fp0
fmul.x fp2,fp0
fmove.l fp0,d0
move.w d0,d3
; a = (GLaccum) (ctx->Accum.ClearColor[3] * acc_scale);
lea $21B4(a2),a1
fmove.s $C(a1),fp0
fmul.x fp2,fp0
fmove.l fp0,d0
move.w d0,d1
; for (i=0;
moveq #0,d0
bra.b L203
L202
; *acc++ = r;
move.w d5,(a0)+
; *acc++ = g;
move.w d4,(a0)+
; *acc++ = b;
move.w d3,(a0)+
; *acc++ = a;
move.w d1,(a0)+
addq.l #1,d0
L203
cmp.l d2,d0
blo.b L202
L204
fmovem.x (a7)+,fp2
movem.l (a7)+,d2-d7/a2
unlk a5
rts
END